<?php

/**
 * Description of Util
 * @author INICIAL!
 */
class Util {

    const ZONA_HORARIA = "America/Santiago";
    const MENSAJE_ERROR = 1;
    const MENSAJE_ALERTA = 2;
    const MENSAJE_INFO = 3;
    const MENSAJE_OK = 4;
    const MOSTRAR_MENSAJE_USUARIO = "mostrarMensajeUsuario";
    const LLAVE_PRINCIPAL = "_[Iasd31Nkjas9ToowfIeaea]_";
    const CANTIDAD_REGISTROS_POR_PAGINA = 10;

    public static function isNullOrEmpty($valor) {
        $esNulo = false;
        try {
            if ((empty($valor) && $valor != "0") || is_null($valor)) {
                $esNulo = true;
            }
        } catch (Exception $e) {
            $esNulo = false;
        }
        return $esNulo;
    }

    public static function isNull($valorActual, $valorReemplazo) {
        if (self::isNullOrEmpty($valorActual)) {
            return $valorReemplazo;
        } else {
            return $valorActual;
        }
    }

    public static function newCaptcha() {
        $numero1 = rand(5, 9);
        $numero2 = rand(1, 5);
        $numero3 = rand(1, 9);
        $resultado = ($numero1 - $numero2) * $numero3;
        $cadena = "($numero1 - $numero2) * $numero3 = ";
        return array($resultado, $cadena);
    }

    public static function getSession($nombreSesion) {
        $session = new THttpSession();
        try {
            $session->open();
        } catch (Exception $e) {
            
        }

        $obj = null;
        try {
            $obj = $session[self::LLAVE_PRINCIPAL . $nombreSesion];
        } catch (Exception $e) {
            $obj = null;
        }
        return $obj;
    }

    public static function setSession($nombreSesion, $obj) {
        $session = new THttpSession();
        try {
            $session->open();
        } catch (Exception $e) {
            
        }

        try {
            $session[self::LLAVE_PRINCIPAL . $nombreSesion] = $obj;
        } catch (Exception $e) {
            $session[self::LLAVE_PRINCIPAL . $nombreSesion] = null;
        }
    }

    public static function logFile($tipoMensaje, $mensaje) {
        date_default_timezone_set(self::ZONA_HORARIA);
        $fechaHora = date("d/m/Y H:i:s");
        $archivo = fopen("log.txt", "a+");
        $tm = "";
        switch ($tipoMensaje) {
            case self::MENSAJE_ALERTA:
                $tm = "ALERTA ";
                break;
            case self::MENSAJE_ERROR:
                $tm = "ERROR ";
                break;
            case self::MENSAJE_INFO:
                $tm = "INFO ";
                break;
            case self::MENSAJE_OK:
                $tm = "OK ";
                break;
                ;
        }

        fwrite($archivo, $tm . ": " . $fechaHora . ". MENSAJE: " . $mensaje . "\n");
        fclose($archivo);
    }

    public static function formateaErrorValidacion($mensaje) {
        $retorno = "Se encontraron los siguientes errores: " . $mensaje;
        return $retorno;
    }

    public static function encriptar($string, $key) {
        $result = '';
        for ($i = 0; $i < strlen($string); $i++) {
            $char = substr($string, $i, 1);
            $keychar = substr($key, ($i % strlen($key)) - 1, 1);
            $char = chr(ord($char) + ord($keychar));
            $result.=$char;
        }
        return base64_encode($result);
    }

    public static function desencriptar($string, $key) {
        $result = '';
        $string = base64_decode($string);
        for ($i = 0; $i < strlen($string); $i++) {
            $char = substr($string, $i, 1);
            $keychar = substr($key, ($i % strlen($key)) - 1, 1);
            $char = chr(ord($char) - ord($keychar));
            $result.=$char;
        }
        return $result;
    }

    public static function encriptarUrl($arr) {
        return base64_encode(json_encode($arr));
    }

    public static function desencriptarUrl($argumento, $key = null) {
        $arr = json_decode(base64_decode($argumento));
        if (is_null($key))
            return $arr;
        try {
            return $arr->$key;
        } catch (Exception $e) {
            return null;
        }
    }

    public static function mostrarMsj($page, $control, $msj, $tipoMsj) {
        $msj = self::escaparComillasJS($msj);
        $page->ClientScript->registerEndScript("cargarMsj", "cargarMsj('" . $control . "','" . $msj . "','" . $tipoMsj . "');");
    }

    public static function escaparComillasJS($texto) {
        //cambio los \n por ~~ (esto es necesario, pues a continuacion voy a sacar los "\" para que no puedan dañar)
        $texto = str_replace("\n", "~~", $texto);
        //escapa el caracter de escape
        $texto = str_replace("\\", "\\\\", $texto);
        //escapa comillas simples
        $texto = str_replace("'", "\'", $texto);
        //escapa comillas dobles
        $texto = str_replace("\"", "\\\"", $texto);
        //cambia ~~ por \n
        $texto = str_replace("~~", "\n", $texto);

        return trim($texto);
    }

    public static function escaparCaracteresEspeciales($texto) {
        $texto = str_replace("ñ", "&ntilde;", $texto);
        $texto = str_replace("á", "&aacute;", $texto);
        $texto = str_replace("é", "&eacute;", $texto);
        $texto = str_replace("í", "&iacute;", $texto);
        $texto = str_replace("ó", "&oacute;", $texto);
        $texto = str_replace("ú", "&uacute;", $texto);
        $texto = str_replace("Ñ", "&Ntilde;", $texto);
        $texto = str_replace("Á", "&Aacute;", $texto);
        $texto = str_replace("É", "&Eacute;", $texto);
        $texto = str_replace("Í", "&Iacute;", $texto);
        $texto = str_replace("Ó", "&Oacute;", $texto);
        $texto = str_replace("Ú", "&Uacute;", $texto);

        return $texto;
    }

    public static function getQuery($arr, $query) {
        foreach ($arr as $key => $value) {
            $query = str_replace($key, $value, $query);
        }
        return $query;
    }

    public static function getFechaActual() {
        return date("d/m/Y");
    }

    public static function getFechaHoraActual() {
        return date("d/m/Y H:i:s");
    }

    public static function getIp() {
        return $_SERVER['REMOTE_ADDR'];
    }

    public static function fechaDateTimeANormal($fecha, $mostrarHHMM = false) {
        date_default_timezone_set(self::ZONA_HORARIA);
        $nuevaFecha = "";
        if (!empty($fecha)) {
            $fecha = strtotime($fecha);
            if ($mostrarHHMM) {
                $nuevaFecha = date("d/m/Y H:i", $fecha);
            } else {
                $nuevaFecha = date("d/m/Y", $fecha);
            }
        }
        return $nuevaFecha;
    }

    public static function fechaNormalADateTime($fecha) {
        date_default_timezone_set(self::ZONA_HORARIA);
        $nuevaFecha = "";
        if (!empty($fecha)) {
            $fecha = str_replace('/', '-', $fecha);
            $fecha = strtotime($fecha);
            $nuevaFecha = date("Y-m-d H:i", $fecha);
        }
        return $nuevaFecha;
    }

    public static function setMensajeUsuario($mensaje, $tipoMensaje) {
        $mensajeRetorno = "";
        switch ($tipoMensaje) {
            case self::MENSAJE_ERROR:
                $mensajeRetorno = "<div ID='holderMensaje' class='alert alert-error' style='display: block;'>
                <button type='button' class='close'>&times;</button>
                <h4>Error</h4>
                " . $mensaje . "
                </div>";
                break;

            case self::MENSAJE_OK:
                $mensajeRetorno = "<div ID='holderMensaje' class='alert alert-success' style='display: block;'>
                <button type='button' class='close'>&times;</button>
                <h4>Ok!</h4>
                " . $mensaje . "
                </div>";
                break;

            case self::MENSAJE_ALERTA:
                $mensajeRetorno = "<div ID='holderMensaje' class='alert alert-block' style='display: block;'>
                <button type='button' class='close'>&times;</button>
                <h4>Alerta!</h4>
                " . $mensaje . "
                </div>";
                break;
            case self::MENSAJE_INFO:
                $mensajeRetorno = "<div ID='holderMensaje' class='alert alert-info' style='display: block;'>
                <button type='button' class='close'>&times;</button>
                <h4>Atenci&oacute;n!</h4>
                " . $mensaje . "
                </div>";
                break;
        }
        return $mensajeRetorno;
    }

    public static function calcularEdadDecimal($fechaNacimiento) {
        $fechaNacimiento = Util::fechaDateTimeANormal($fechaNacimiento);
        $fechaNacimiento = str_replace("/", "", $fechaNacimiento);
        $fechaActual = date("dmY");
        $fechaNac = "";
        $fechaAct = "";
        preg_match("/([0-9]{1,2})([0-9]{1,2})([0-9]{2,4})/", $fechaNacimiento, $fechaNac);
        preg_match("/([0-9]{1,2})([0-9]{1,2})([0-9]{2,4})/", $fechaActual, $fechaAct);
        $dateNacimiento = mktime(0, 0, 0, $fechaNac[2], $fechaNac[1], $fechaNac[3]);
        $dateActual = mktime(0, 0, 0, $fechaAct[2], $fechaAct[1], $fechaAct[3]);
        $edadDecimal = number_format((($dateActual - $dateNacimiento) / (60 * 60 * 24 * 365)), 1);

        return $edadDecimal;
    }

    /**
     * Obtiene path de recursos Escort 
     * @param type $page $this->Page
     * @param type $tipo Tipo_Recurso::TIPO
     * @param type $recurso Tipo_Recurso::RECURSO
     * @return String
     */
    public static function obtenerPathRecursoEscort($page, $tipo, $recurso) {
        $path = $page->Theme->BaseUrl;
        switch ($tipo) {
            case Tipo_recurso::IMAGEN:
                switch ($recurso) {
                    case Tipo_recurso::PATH_IMAGEN_DESTACADAS:
                        $path .= Sistema::PATH_RECURSO_ESCORT_IMAGEN . Tipo_recurso::PATH_IMAGEN_DESTACADAS;
                        break;
                    case Tipo_recurso::PATH_IMAGEN_TODAS:
                        $path .= Sistema::PATH_RECURSO_ESCORT_IMAGEN . Tipo_recurso::PATH_IMAGEN_TODAS;
                        break;
                    case Tipo_recurso::PATH_IMAGEN_TOP5:
                        $path .= Sistema::PATH_RECURSO_ESCORT_IMAGEN . Tipo_recurso::PATH_IMAGEN_TOP5;
                        break;
                    case Tipo_recurso::PATH_IMAGEN_ULTIMAS_DIOSAS:
                        $path .= Sistema::PATH_RECURSO_ESCORT_IMAGEN . Tipo_recurso::PATH_IMAGEN_ULTIMAS_DIOSAS;
                        break;
                    case Tipo_recurso::PATH_IMAGEN_PERFIL:
                        $path .= Sistema::PATH_RECURSO_ESCORT_IMAGEN . Tipo_recurso::PATH_IMAGEN_PERFIL;
                        break;
                    case Tipo_recurso::PATH_IMAGEN_PERFIL_THUMBS:
                        $path .= Sistema::PATH_RECURSO_ESCORT_IMAGEN . Tipo_recurso::PATH_IMAGEN_PERFIL_THUMBS;
                        break;
                    case Tipo_recurso::PATH_IMAGEN_NOTICIA:
                        $path .= Sistema::PATH_RECURSO_ESCORT_IMAGEN . Tipo_recurso::PATH_IMAGEN_NOTICIA;
                        break;
                    case Tipo_recurso::PATH_IMAGEN_NOTICIA_THUMBS:
                        $path .= Sistema::PATH_RECURSO_ESCORT_IMAGEN . Tipo_recurso::PATH_IMAGEN_NOTICIA_THUMBS;
                        break;
                    case Tipo_recurso::PATH_IMAGEN_CONCURSO:
                        $path .= Sistema::PATH_RECURSO_ESCORT_IMAGEN . Tipo_recurso::PATH_IMAGEN_CONCURSO;
                        break;
                    case Tipo_recurso::PATH_IMAGEN_CONCURSO_THUMBS:
                        $path .= Sistema::PATH_RECURSO_ESCORT_IMAGEN . Tipo_recurso::PATH_IMAGEN_CONCURSO_THUMBS;
                        break;
                }
                break;
            case Tipo_recurso::VIDEO:
                $path .= Sistema::PATH_RECURSO_ESCORT_VIDEO;
                break;
            default:
                break;
        }
        return $path;
    }

    public static function jsonOpcionesEliminar($arr) {
        return htmlentities(json_encode($arr));
    }

    public static function obtenerMesEspanol($num) {
        $mes = "";
        switch ($num) {
            case 1:
                $mes = "Enero";
                break;
            case 2:
                $mes = "Febrero";
                break;
            case 3:
                $mes = "Marzo";
                break;
            case 4:
                $mes = "Abril";
                break;
            case 5:
                $mes = "Mayo";
                break;
            case 6:
                $mes = "Junio";
                break;
            case 7:
                $mes = "Julio";
                break;
            case 8:
                $mes = "Agosto";
                break;
            case 9:
                $mes = "Septiembre";
                break;
            case 10:
                $mes = "Octubre";
                break;
            case 11:
                $mes = "Noviembre";
                break;
            case 12:
                $mes = "Diciembre";
                break;
            default:
                break;
        }
        return $mes;
    }

    public static function obtenerFechaExtendida($fecha) {
        $dia = date("d", strtotime($fecha));
        $mesNum = date("n", strtotime($fecha));
        $mes = self::obtenerMesEspanol($mesNum);
        $anno = date("Y", strtotime($fecha));
        $hora = date("H", strtotime($fecha));
        $min = date("i", strtotime($fecha));

        $fechaExtendida = $dia . " de " . $mes . " del " . $anno . " a las " . $hora . ":" . $min . " hrs";
        return $fechaExtendida;
    }

    public static function isDatetimeEmpty($fechaDatetime, $valorReemplazo) {
        if ($fechaDatetime == "0000-00-00 00:00:00" || self::isNullOrEmpty($fechaDatetime)) {
            return $valorReemplazo;
        } else {
            return $fechaDatetime;
        }
    }

    public static function leerArchivo($nombreArchivo) {
        $fichero = fopen($nombreArchivo, "r");
        $contenido = fread($fichero, filesize($nombreArchivo));
        return $contenido;
    }

    public static function nicetime($date) {
        if (empty($date)) {
            return "No disponible";
        }

        //$periods = array("second", "minute", "hour", "day", "week", "month", "year", "decade");
        $periods = array("segundo", "minuto", "hora", "d&iacute;a", "semana", "mes", "a&ntilde;o", "decada");
        $lengths = array("60", "60", "24", "7", "4.35", "12", "10");

        $now = time();
        $unix_date = strtotime($date);

        // check validity of date
        if (empty($unix_date)) {
            return "No disponible";
        }

        // is it future date or past date
        if ($now > $unix_date) {
            $difference = $now - $unix_date;
            $tense = "atr&aacute;s";
        } else {
            $difference = $unix_date - $now;
            $tense = "desde ahora";
        }

        for ($j = 0; $difference >= $lengths[$j] && $j < count($lengths) - 1; $j++) {
            $difference /= $lengths[$j];
        }

        $difference = round($difference);

        if ($difference != 1) {
            $periods[$j].= "s";
        }

        //return "hace $difference $periods[$j] {$tense}";
        return "hace $difference $periods[$j]";
    }

    /**
     * obtiene nombre del directorio base donde corre la aplicacion
     * @author VSR, 01/01/2011
     */
    public static function obtenerDirectorioBaseAplicacion() {
        $directorio = dirname(Prado::getApplication()->getBasePath());
        return $directorio . DIRECTORY_SEPARATOR;
    }

    public static function redimensionarImagen($rutaImagen, $width, $height) {
        try {
            $obj = new ResizeImage();
            $obj->max_width($width);
            $obj->max_height($height);
            $obj->image_path($rutaImagen);
            $obj->image_resize();
        } catch (Exception $e) {
            //no hace nada
        }
    }

    public static function obtenerDirectorioVirtual() {
        $response = new THttpRequest;
        return $response->getBaseUrl();
    }

    public static function startsWith($textoOriginal, $textoABuscar) {
        return strpos($textoOriginal, $textoABuscar) === 0;
    }

    public static function extraeTextoEntreDosPalabras($texto, $palabraInicial, $palabraFinal) {
        $textoExtraido = "";
        try {
            if (!self::isNullOrEmpty($texto)) {
                $inicio = strpos($texto, $palabraInicial, 1) + strlen($palabraInicial);
                $fin = strpos($texto, $palabraFinal, $inicio);
                if ($fin > 0 && $inicio > strlen($palabraInicial)) {
                    $textoExtraido = trim(str_replace("\r\n", "", (substr($texto, $inicio, $fin - $inicio))));
                }
            }
        } catch (Exception $e) {
            $textoExtraido = $texto;
        }
        //retorna valor
        return $textoExtraido;
    }

    public static function obtenerExtensionArchivo($nombreArchivo) {
        $extension = "";
        try {
            if (!self::isNullOrEmpty($nombreArchivo)) {
                $ext = strrpos($nombreArchivo, '.');
                $fileName_a = substr($nombreArchivo, 0, $ext);
                $fileName_b = substr($nombreArchivo, $ext);
                $extension = str_replace(".", "", $fileName_b);
            }
        } catch (Exception $e) {
            $extension = "";
        }
        return $extension;
    }

    public static function obtenerNombreUnicoArchivo($sufijo = "") {
        date_default_timezone_set(self::ZONA_HORARIA);
        $nombre = date("YmdHis");
        if (!self::isNullOrEmpty($sufijo)) {
            $sufijo = preg_replace('/[^aA-zZ0-9\._\-]/', '', $sufijo);
            $nombre .= "_" . $sufijo;
        }
        return $nombre;
    }

    public static function reemplazarCaracteresEspeciales($nombreArchivo, $caracterReemplazo = "_") {
        $nuevoNombre = "";
        try {
            $nuevoNombre = preg_replace('/[^\w\._]+/', $caracterReemplazo, $nombreArchivo);
            $nuevoNombre = self::reemplazarAcento($nuevoNombre);
        } catch (Exception $e) {
            $nuevoNombre = $nombreArchivo;
        }
        return $nuevoNombre;
    }

    public static function reemplazarAcento($texto) {
        try {
            $texto = str_replace("á", "a", $texto);
            $texto = str_replace("é", "e", $texto);
            $texto = str_replace("í", "i", $texto);
            $texto = str_replace("ó", "o", $texto);
            $texto = str_replace("ú", "u", $texto);
            $texto = str_replace("Á", "A", $texto);
            $texto = str_replace("É", "E", $texto);
            $texto = str_replace("Í", "I", $texto);
            $texto = str_replace("Ó", "O", $texto);
            $texto = str_replace("Ú", "U", $texto);
        } catch (Exception $e) {
            $texto = $texto;
        }
        return $texto;
    }
    public static function reemplazarAcentoTest($texto) {
        try {
            $texto = str_replace("á", "&aacute;", $texto);
            $texto = str_replace("é", "&eacute;", $texto);
            $texto = str_replace("í", "&iacute;", $texto);
            $texto = str_replace("ó", "&oacute;", $texto);
            $texto = str_replace("ú", "&uacute;", $texto);
            $texto = str_replace("Á", "&Aacute;", $texto);
            $texto = str_replace("É", "&Eacute;", $texto);
            $texto = str_replace("Í", "&Iacute;", $texto);
            $texto = str_replace("Ó", "&Oacute;", $texto);
            $texto = str_replace("Ú", "&Uacute;", $texto);
        } catch (Exception $e) {
            $texto = $texto;
        }
        return $texto;
    }

    public static function obtenerCarpetaPorTipoRecurso($tipoRecurso) {
        $path = "";
        switch ($tipoRecurso) {
            case "DESTACADA":
                $path = Tipo_recurso::PATH_IMAGEN_DESTACADAS;
                break;
            case "TOP5":
                $path = Tipo_recurso::PATH_IMAGEN_TOP5;
                break;
            case "TODAS":
                $path = Tipo_recurso::PATH_IMAGEN_TODAS;
                break;
            case "ULTIMAS_DIOSAS":
                $path = Tipo_recurso::PATH_IMAGEN_ULTIMAS_DIOSAS;
                break;
            case "PERFIL":
                $path = Tipo_recurso::PATH_IMAGEN_PERFIL;
                break;
            case "PERFIL_THUMBS":
                $path = Tipo_recurso::PATH_IMAGEN_PERFIL_THUMBS;
                break;
            case "NOTICIA":
                $path = Tipo_recurso::PATH_IMAGEN_NOTICIA;
                break;
            case "NOTICIA_THUMBS":
                $path = Tipo_recurso::PATH_IMAGEN_NOTICIA_THUMBS;
                break;
            case "CONCURSO":
                $path = Tipo_recurso::PATH_IMAGEN_CONCURSO;
                break;
            case "CONCURSO_THUMBS":
                $path = Tipo_recurso::PATH_IMAGEN_CONCURSO_THUMBS;
                break;
            default:
                break;
        }
        return $path;
    }

    public static function obtenerPathRecursoEscortPorTipoRecurso($page, $tipoRecurso) {
        $path = self::obtenerCarpetaPorTipoRecurso($tipoRecurso);
        $path = self::obtenerPathRecursoEscort($page, Tipo_recurso::IMAGEN, $path);
        return $path;
    }

    public static function redimensionarImagenRecursoEscort($rutaImagen, $tipoRecurso) {
        try {
            switch ($tipoRecurso) {
                case "DESTACADA":
                    self::redimensionarImagen($rutaImagen, Tipo_recurso::WIDTH_IMAGEN_DESTACADAS, "0");
                    self::redimensionarImagen($rutaImagen, "0", Tipo_recurso::HEIGHT_IMAGEN_DESTACADAS);
                    break;
                case "TOP5":
                    self::redimensionarImagen($rutaImagen, Tipo_recurso::WIDTH_IMAGEN_TOP5, "0");
                    self::redimensionarImagen($rutaImagen, "0", Tipo_recurso::HEIGHT_IMAGEN_TOP5);
                    break;
                case "TODAS":
                    self::redimensionarImagen($rutaImagen, Tipo_recurso::WIDTH_IMAGEN_TODAS, "0");
                    self::redimensionarImagen($rutaImagen, "0", Tipo_recurso::HEIGHT_IMAGEN_TODAS);
                    break;
                case "ULTIMAS_DIOSAS":
                    self::redimensionarImagen($rutaImagen, Tipo_recurso::WIDTH_IMAGEN_ULTIMAS_DIOSAS, "0");
                    self::redimensionarImagen($rutaImagen, "0", Tipo_recurso::HEIGHT_IMAGEN_ULTIMAS_DIOSAS);
                    break;
                case "PERFIL":
                    self::redimensionarImagen($rutaImagen, Tipo_recurso::WIDTH_IMAGEN_PERFIL, "0");
                    self::redimensionarImagen($rutaImagen, "0", Tipo_recurso::HEIGHT_IMAGEN_PERFIL);
                    break;
                case "NOTICIA":
                    self::redimensionarImagen($rutaImagen, Tipo_recurso::WIDTH_IMAGEN_NOTICIA, "0");
                    self::redimensionarImagen($rutaImagen, "0", Tipo_recurso::HEIGHT_IMAGEN_NOTICIA);
                    break;
                case "CONCURSO":
                    self::redimensionarImagen($rutaImagen, Tipo_recurso::WIDTH_IMAGEN_CONCURSO, "0");
                    self::redimensionarImagen($rutaImagen, "0", Tipo_recurso::HEIGHT_IMAGEN_CONCURSO);
                    break;
                default:
                    break;
            }
        } catch (Exception $e) {
            //no hace nada
        }
    }

    /* FUNCION PARA SUBIR IMAGENES */

    public static function subirImagen($name, $nameTemp, $type) {
        try {
            $ThumbWidthSize = "100";
            $ThumbHeightSize = "100";
            $DestinationDirectory = "./themes/user/images/recurso_escort/imagen/perfil/thumbs/";
            $Quality = 90;
            $TempSrc = $nameTemp;
            $ImageType = $type;

            switch (strtolower($ImageType)) {
                case 'image/png':
                    $CreatedImage = imagecreatefrompng($TempSrc);
                    break;
                case 'image/gif':
                    $CreatedImage = imagecreatefromgif($TempSrc);
                    break;
                case 'image/jpeg':
                case 'image/pjpeg':
                    $CreatedImage = imagecreatefromjpeg($TempSrc);
                    break;
                default:
            }

            list($CurWidth, $CurHeight) = getimagesize($TempSrc);
            $NewImageName = $name;
            $thumb_DestRandImageName = $DestinationDirectory . $NewImageName;

            if (!self::cropImage($CurWidth, $CurHeight, $ThumbWidthSize, $ThumbHeightSize, $thumb_DestRandImageName, $CreatedImage, $Quality, $ImageType)) {
                return false;
            } else {
                return true;
            }
        } catch (Exception $e) {
            throw new Exception($e->getMessage());
        }
    }

    public static function subirAvatarUsuario($name, $nameTemp, $type, $username) {
        try {
            $ThumbWidthSize = "180";
            $ThumbHeightSize = "180";
            $DestinationDirectory = "./themes/user/images/avatar/avatar_";
            $Quality = 90;
            $ImageType = $type;
            $RandomNumber = rand(0, 999999);

            switch (strtolower($ImageType)) {
                case 'image/png':
                    $CreatedImage = imagecreatefrompng($nameTemp);
                    break;
                case 'image/gif':
                    $CreatedImage = imagecreatefromgif($nameTemp);
                    break;
                case 'image/jpeg':
                case 'image/pjpeg':
                    $CreatedImage = imagecreatefromjpeg($nameTemp);
                    break;
                default:
            }

            list($CurWidth, $CurHeight) = getimagesize($nameTemp);
            $ImageExt = substr($name, strrpos($name, '.'));
            $ImageExt = str_replace('.', '', $ImageExt);
            $ImageName = preg_replace("/\\.[^.\\s]{3,4}$/", "", $nameTemp);

            $NewImageName = $RandomNumber . '.' . $ImageExt;
            $thumb_DestImageName = $DestinationDirectory . $NewImageName;

            if (!self::cropImage($CurWidth, $CurHeight, $ThumbWidthSize, $ThumbHeightSize, $thumb_DestImageName, $CreatedImage, $Quality, $ImageType)) {
                return null;
            } else {
                return $thumb_DestImageName;
            }
        } catch (Exception $e) {
            throw new Exception($e->getMessage());
        }
    }

    private function cropImage($CurWidth, $CurHeight, $ThumbWidthSize, $ThumbHeightSize, $DestFolder, $SrcImage, $Quality, $ImageType) {
        if ($CurWidth <= 0 || $CurHeight <= 0) {
            return false;
        }

        if ($CurWidth > $CurHeight) {
            $y_offset = 0;
            $x_offset = ($CurWidth - $CurHeight) / 2;
            $square_size = $CurWidth - ($x_offset * 2);
        } else {
            $x_offset = 0;
            $y_offset = ($CurHeight - $CurWidth) / 2;
            $square_size = $CurHeight - ($y_offset * 2);
        }

        $NewCanves = imagecreatetruecolor($ThumbWidthSize, $ThumbHeightSize);
        if (imagecopyresampled($NewCanves, $SrcImage, 0, 0, $x_offset, $y_offset, $ThumbWidthSize, $ThumbHeightSize, $square_size, $square_size)) {

            switch (strtolower($ImageType)) {
                case 'image/png':
                    imagepng($NewCanves, $DestFolder);
                    break;
                case 'image/gif':
                    imagegif($NewCanves, $DestFolder);
                    break;
                case 'image/jpeg':
                case 'image/pjpeg':
                    imagejpeg($NewCanves, $DestFolder, $Quality);
                    break;
                default:
                    return false;
            }

            //Destroy image, frees memory	
            if (is_resource($NewCanves)) {
                imagedestroy($NewCanves);
            }
            return true;
        }
    }

    public static function reemplazarTextoPorEmoticon($texto) {
        $texto = str_replace(":wink:", "<img src=\"./themes/user/images/emoticones/wink.png\" class=\"emo\" />", $texto);
        $texto = str_replace(":angry:", "<img src=\"./themes/user/images/emoticones/angry.png\" class=\"emo\" />", $texto);
        $texto = str_replace(":cheesy:", "<img src=\"./themes/user/images/emoticones/cheesy.png\" class=\"emo\" />", $texto);
        $texto = str_replace(":cool:", "<img src=\"./themes/user/images/emoticones/cool.png\" class=\"emo\" />", $texto);
        $texto = str_replace(":cry:", "<img src=\"./themes/user/images/emoticones/cry.png\" class=\"emo\" />", $texto);
        $texto = str_replace(":huh:", "<img src=\"./themes/user/images/emoticones/huh.png\" class=\"emo\" />", $texto);
        $texto = str_replace(":rolleyes:", "<img src=\"./themes/user/images/emoticones/rolleyes.png\" class=\"emo\" />", $texto);
        $texto = str_replace(":sad:", "<img src=\"./themes/user/images/emoticones/sad.png\" class=\"emo\" />", $texto);
        $texto = str_replace(":shocked:", "<img src=\"./themes/user/images/emoticones/shocked.png\" class=\"emo\" />", $texto);
        $texto = str_replace(":smiley:", "<img src=\"./themes/user/images/emoticones/smiley.png\" class=\"emo\" />", $texto);
        $texto = str_replace(":tongue:", "<img src=\"./themes/user/images/emoticones/tongue.png\" class=\"emo\" />", $texto);
        $texto = str_replace(":undecided:", "<img src=\"./themes/user/images/emoticones/undecided.png\" class=\"emo\" />", $texto);

        return $texto;
    }

    public static function validaFechaMayorAActual($fecha) {
        $fecha1 = substr($fecha, -2);
        $fecha2 = date("Y-m-d");
        $fecha2 = substr($fecha2, -2);
        if ($fecha2 > $fecha1) {
            return true;
        } else {
            return false;
        }
    }

    public static function getTipoUsuario($idTipoUsuario) {
        $tipo = "";

        switch ($idTipoUsuario) {
            case Tipo_usuario::ADMINISTRADOR:
                $tipo = "Administrador";
                break;
            case Tipo_usuario::ESCORT:
                $tipo = "Escort";
                break;
            case Tipo_usuario::MODERADOR:
                $tipo = "Moderador";
                break;
            case Tipo_usuario::USUARIO:
                $tipo = "Usuario";
                break;
            default:
                $tipo = "";
                break;
        }

        return $tipo;
    }

    public static function recortarTexto($texto, $largoMaximo, $sufijo = "") {
        $nuevoTexto = "";
        $largoTexto = strlen($texto);

        try {
            if ($largoTexto <= $largoMaximo) {
                $nuevoTexto = $texto;
            } else {
                $nuevoTexto = substr($texto, 0, $largoMaximo) . $sufijo;
            }
        } catch (Exception $e) {
            $nuevoTexto = $texto;
        }
        return $nuevoTexto;
    }

    public static function dibujarImagenPrettyPhoto($page, $src, $tipoRecurso, $funcionEliminar) {
        $template = "";
        $img = "";

        if (self::isNullOrEmpty($src)) {
            $img = "<span class=\"span12\"><i>No tiene imagen asociada</i></span>";
        } else {
            $path = self::obtenerPathRecursoEscortPorTipoRecurso($page, $tipoRecurso);
            $path = $path . $src;

            $template .= "<div class=\"da-gallery prettyPhoto\">";
            $template .= "  <ul>";
            $template .= "    <li>";
            $template .= "      <a href=\"{#IMG}\" rel=\"prettyPhoto\"><img src=\"{#IMG}\" alt=\"\" ></a>";

            if (!self::isNullOrEmpty($funcionEliminar)) {
                $template .= "  <span class=\"da-gallery-hover\">";
                $template .= "    <ul>";
                $template .= "      <li class=\"da-gallery-delete\"><a href=\"javascript:;\" onclick=\"" . htmlentities($funcionEliminar) . "\"><i class=\"icon-bin\"></i></a></li>";
                $template .= "    </ul>";
                $template .= "  </span>";
            }

            $template .= "    </li>";
            $template .= "  </ul>";
            $template .= "</div>";

            $img = str_replace("{#IMG}", $path, $template);
        }

        return $img;
    }

    public static function crearThumbs($name, $nameTemp, $type, $tipoRecurso) {
        try {
            $directorio_thumbs = self::obtenerCarpetaPorTipoRecurso($tipoRecurso);
            $ThumbWidthSize = "100";
            $ThumbHeightSize = "100";
            $DestinationDirectory = "themes/user/images/recurso_escort/imagen/" . $directorio_thumbs;
            $Quality = 90;
            $TempSrc = $nameTemp;
            $ImageType = $type;

            switch (strtolower($ImageType)) {
                case 'image/png':
                    $CreatedImage = imagecreatefrompng($TempSrc);
                    break;
                case 'image/gif':
                    $CreatedImage = imagecreatefromgif($TempSrc);
                    break;
                case 'image/jpeg':
                case 'image/pjpeg':
                    $CreatedImage = imagecreatefromjpeg($TempSrc);
                    break;
                default:
            }

            list($CurWidth, $CurHeight) = getimagesize($TempSrc);
            $NewImageName = $name;
            $thumb_DestRandImageName = $DestinationDirectory . $NewImageName;

            if (!self::cropImage($CurWidth, $CurHeight, $ThumbWidthSize, $ThumbHeightSize, $thumb_DestRandImageName, $CreatedImage, $Quality, $ImageType)) {
                return false;
            } else {
                return true;
            }
        } catch (Exception $e) {
            throw new Exception($e->getMessage());
        }
    }

    public static function obtenerPopover($titulo, $contenido, $posicion) {
        $html = "";
        $template = "...&nbsp;<div class=\"icol-doc-resize\" rel=\"popover\" data-trigger=\"hover\" data-html=\"true\" data-placement=\"{#POSICION}\" data-content=\"{#CONTENIDO}\" data-original-title=\"{#TITULO}\">&nbsp;</div>";

        try {
            $template = str_replace("{#TITULO}", htmlentities($titulo), $template);
            $template = str_replace("{#CONTENIDO}", htmlentities($contenido), $template);
            $template = str_replace("{#POSICION}", htmlentities($posicion), $template);
            $html = $template;
        } catch (Exception $e) {
            $html = "";
        }

        return $html;
    }

    public static function eliminaUltimosCaracteresTexto($texto, $totalCaracteresEliminar = 1) {
        //calcula largo de texto
        $largoTexto = strlen($texto);

        if ($largoTexto == 0) {
            $texto = "";
        } else {
            //elimina caracteres
            $texto = substr($texto, 0, $largoTexto - $totalCaracteresEliminar);
        }
        return $texto;
    }

    public static function obtenerJSONjCombo($tipo, $filtro, $callback) {
        $json = "";
        $jsonSinDatos = "{\"-200\":\"SIN DATOS\"}";

        try {
            $oCombo = new Combo();
            $oCombo->setTipo($tipo);
            $oCombo->setFiltradoPorId($filtro);
            $oComboBLL = new ComboBLL();
            $arr = $oComboBLL->listar($oCombo);

            foreach ($arr as $row) {
                $valor = $row["Valor"];
                $texto = $row["Texto"];

                $json .= "\"" . $valor . "\":\"" . Util::escaparComillasJS($texto) . "\",";
            }

            if (!Util::isNullOrEmpty($json)) {
                $json = Util::eliminaUltimosCaracteresTexto($json);
                $json = "{" . $json . "}";
            } else {
                $json = $jsonSinDatos;
            }

            if (!Util::isNullOrEmpty($callback)) {
                $json = $callback . "(" . $json . ")";
            }
        } catch (Exception $e) {
            $json = $jsonSinDatos;
        }

        return $json;
    }

    public static function formatearConSeparadorMiles($valor, $cantidadDecimales = 0) {
      $nuevoValor = "";
      try {
        //si trae puntos se los quita
        $valor = str_replace(",", ".", $valor);
        $nuevoValor = number_format($valor, $cantidadDecimales, ",", ".");
      } catch (Exception $e) {
        $nuevoValor = $valor;
      }
      return $nuevoValor;
    }

    public static function registrarJavascript($page, $script, $posicion="FINAL", $nombreRegistro="") {
      if(self::isNullOrEmpty($nombreRegistro)){
        $nombreRegistro = self::obtenerNombreUnicoArchivo();
      }

      if(strtoupper($posicion) == "FINAL"){
        $page->ClientScript->registerEndScript($nombreRegistro, $script);
      } else {
        $page->ClientScript->registerHeadScript($nombreRegistro, $script);
      }
    }

    public static function getNombreMesAnoActual() {
        $mesNum = date("n");
        $mes = self::obtenerMesEspanol($mesNum);
        $anno = date("Y");

        return $mes." ".$anno;
    }

    public static function fechaDateTimeAISO($fecha, $mostrarHHMM = false) {
        date_default_timezone_set(self::ZONA_HORARIA);
        $nuevaFecha = "";
        if (!empty($fecha)) {
            $fecha = strtotime($fecha);
            if ($mostrarHHMM) {
                $nuevaFecha = date("Y-m-d H:i", $fecha);
            } else {
                $nuevaFecha = date("Y-m-d", $fecha);
            }
        }
        return $nuevaFecha;
    }

    public static function reemplazarSaltoLineaToBR($texto){
      return str_replace(array("\r\n", "\r", "\n"), "<br />", $texto);
    }

    public static function reemplazarBRToSaltoLinea($texto){
      return str_replace(array("<br />","</br>"), "\n", $texto);
    }
}

?>